"""
结果管理模块
功能：分类和优先级结果的存储、查询、统计
支持：结果导出、历史记录查看
输入：分类和优先级结果
输出：结构化数据存储
"""

import json
import pandas as pd
from typing import List, Dict, Optional
from datetime import datetime

class ResultsManager:
    def __init__(self):
        self.results_storage = []
    
    def save_result(self, result_data: Dict) -> bool:
        """
        保存分类和优先级结果
        :param result_data: 结果数据
        :return: 是否保存成功
        """
        try:
            # 验证必要字段
            required_fields = ['id', 'title', 'description', 'event_type', 'priority', 'timestamp']
            for field in required_fields:
                if field not in result_data:
                    raise ValueError(f"缺少必要字段: {field}")
            
            # 添加时间戳
            result_data['saved_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            
            # 保存到存储
            self.results_storage.append(result_data)
            return True
        except Exception as e:
            print(f"结果保存失败: {e}")
            return False
    
    def get_result_by_id(self, result_id: str) -> Optional[Dict]:
        """
        根据ID获取结果
        :param result_id: 结果ID
        :return: 结果数据或None
        """
        for result in self.results_storage:
            if result.get('id') == result_id:
                return result
        return None
    
    def query_results(self, filters: Dict = None) -> List[Dict]:
        """
        查询结果
        :param filters: 查询条件
        :return: 符合条件的结果列表
        """
        if filters is None:
            return self.results_storage[:]
        
        results = []
        for result in self.results_storage:
            match = True
            for key, value in filters.items():
                if key in result and result[key] != value:
                    match = False
                    break
            if match:
                results.append(result)
        
        return results
    
    def get_statistics(self) -> Dict:
        """
        获取统计信息
        :return: 统计数据
        """
        if not self.results_storage:
            return {}
        
        df = pd.DataFrame(self.results_storage)
        
        # 总数统计
        total_count = len(df)
        
        # 按事件类型统计
        event_type_counts = df['event_type'].value_counts().to_dict()
        
        # 按优先级统计
        priority_counts = df['priority'].value_counts().to_dict()
        
        # 时间范围
        if 'timestamp' in df.columns:
            time_range = {
                'earliest': df['timestamp'].min(),
                'latest': df['timestamp'].max()
            }
        else:
            time_range = {}
        
        return {
            'total_count': total_count,
            'event_type_counts': event_type_counts,
            'priority_counts': priority_counts,
            'time_range': time_range
        }
    
    def export_results(self, file_path: str, format: str = 'json') -> bool:
        """
        导出结果
        :param file_path: 导出文件路径
        :param format: 导出格式 (json/csv)
        :return: 是否导出成功
        """
        try:
            if format.lower() == 'json':
                with open(file_path, 'w', encoding='utf-8') as f:
                    json.dump(self.results_storage, f, ensure_ascii=False, indent=2)
            elif format.lower() == 'csv':
                df = pd.DataFrame(self.results_storage)
                df.to_csv(file_path, index=False, encoding='utf-8')
            else:
                raise ValueError(f"不支持的导出格式: {format}")
            
            return True
        except Exception as e:
            print(f"结果导出失败: {e}")
            return False
    
    def delete_result(self, result_id: str) -> bool:
        """
        删除结果
        :param result_id: 结果ID
        :return: 是否删除成功
        """
        for i, result in enumerate(self.results_storage):
            if result.get('id') == result_id:
                del self.results_storage[i]
                return True
        return False
    
    def get_all_results(self) -> List[Dict]:
        """
        获取所有结果
        :return: 所有结果列表
        """
        return self.results_storage[:]

# 使用示例
def main():
    manager = ResultsManager()
    
    # 示例结果数据
    sample_results = [
        {
            'id': 'RES001',
            'title': '交通事故',
            'description': '在中山路与解放路交叉口发生一起两车相撞事故',
            'event_type': '交通事故',
            'priority': '紧急',
            'timestamp': '2023-05-15 14:30:00'
        },
        {
            'id': 'RES002',
            'title': '道路施工',
            'description': '南京路从人民广场到淮海路段进行道路施工',
            'event_type': '施工',
            'priority': '一般',
            'timestamp': '2023-05-15 15:20:00'
        },
        {
            'id': 'RES003',
            'title': '设施故障',
            'description': '地铁2号线人民广场站电梯故障停运',
            'event_type': '设施故障',
            'priority': '紧急',
            'timestamp': '2023-05-15 16:10:00'
        }
    ]
    
    # 保存结果
    for result in sample_results:
        manager.save_result(result)
    
    # 查询结果
    print("所有结果:")
    all_results = manager.get_all_results()
    for result in all_results:
        print(f"  {result['id']}: {result['title']} - {result['event_type']} - {result['priority']}")
    
    # 按类型查询
    traffic_accidents = manager.query_results({'event_type': '交通事故'})
    print("\n交通事故类结果:")
    for result in traffic_accidents:
        print(f"  {result['id']}: {result['description']}")
    
    # 获取统计信息
    stats = manager.get_statistics()
    print("\n统计信息:")
    print(f"  总数: {stats.get('total_count', 0)}")
    print(f"  事件类型分布: {stats.get('event_type_counts', {})}")
    print(f"  优先级分布: {stats.get('priority_counts', {})}")
    
    # 导出结果
    # manager.export_results('results_export.json', 'json')
    # manager.export_results('results_export.csv', 'csv')

if __name__ == "__main__":
    main()